これからAWSを使ってIoTをやってみたい人が抑えておくべき10のキーサービス & 7つのキーワード #reinvent
こんにちは、せーのです。 今回はAWSの沢山あるサービスの中から、Re:InventのIoT系のセッションに参加した結果「これはやっといた方がいいなあ」というAWSのサービスとAWS以外のキーワードについて重要度順にご紹介したいと思います。
AWS サービス
AWS IoT
今回初登場したAWS初のIoT系サービスです。 IoTでネックになりがちなMQTTSによるセキュアな通信や、スケールするブローカーによる振り分け、オフラインになったデバイスとのステータスSync等をAWS側で一手に引き受けてくれる、フルマネージドのサービスになります。 デバイス側にもSDKが提供されていますので、すごくシンプルにデバイスとAWSをつなげることができます。一方で「Shadow」や「Rule」等AWS IoT特有の考え方もあるので、ここはきっちり抑えておきましょう。
AWS Lambda
今回のRe:Inventに参加して最も強く感じたことは「ますますEC2は使わなくなる」という事です。 私が参加したIoT系のセッションのほぼすべてにおいてEC2は登場せず、基本的には全てLambda内に処理を書いて動かしていました。コストの面からみても、保守性の面から見てもIoTを始めるにあたってLambdaの知識は欠かせないものになります。
Amazon Kinesis Streams / Amazon Kinesis Firehose
IoTにおいて連続して投げ続けられるデータのハンドリングをどうするか、というのは重要なポイントです。 どれだけになるかわからない大量のデータを受け取り、うまく後続のサービスに流すのにはストリームサービスが必要です。 今回新しく発表されたKinesis Firehoseを使ってRedShiftやS3に直接データを流し込むことができます。 加工が必要ない、大量のデータの場合にはとりあえずこのKinesis Firehoseを使ってデータを流し込んでしまいましょう。 一方加工が必要なデータの場合はKinesis Stremasに入れてLambdaにつなげ、Lambdaで加工して後ろのDBに流しましょう。
「あれ、Kinesisそのものはどこいった?」と思ってる方、今回の発表で
- Kinesis => Kinesis Streams
- Kinesis Firehose(追加)
となっております。これからは「Kinesis Streams」と呼びましょう。
公式ドキュメント: Amazon Kinesis Firehose
Amazon DynamoDB
IoTで扱うセンサーデータは基本的には単純です。温度が何度とか、緯度経度がいくつだとか、JSONで一段か二段程度のネストしかしないものですので、データの格納にはDynamoDBが最適です。データを入れるだけならあっという間に実装できるでしょう。ですが取り出すことも考えてインデックスの仕組み等もしっかり抑えておきましょう。
Amazon SNS
IoT系のサービスを「つなげる」役目としてSNSが重要になってきます。SNSを軽く見てはいけません。SNSの耐久度やキャパシティはバツグンなので、LambdaやAWS以外のサードパーティのエンドポイントにデータを投げたい時などにはSNSに突っ込んで、SNSから通知してもらう、というアーキテクチャがスタンダードになるかと思います。
Amazon RedShift
センサーデータは言うまでもなく大量です。そしてこれらのデータを分析することで初めてこれらのデータの活用価値、というものが出てきます。いわゆる「ビッグデータ」ですね。 データを分析する際には普通のRDBMSではなくDWH(データウェアハウス)を使うと効率よくデータが取り出せますのでRedShiftの使い方は覚えておきましょう。
Amazon ElasticSearch Searvice
データの現状をダッシュボードで可視化する、というのはIoTをやっていると必ずと言っていいほどでる要件です。Amazon ElasticSearchを覚えておくとこの中にKIBANAが入っているのですぐにダッシュボードが作れます。このサービスは覚えておいて損はないでしょう。
公式ドキュメント: Amazon ElasticSearch Service
Amazon S3
AWSのデータの基本はS3であり、全てのサービスはS3を真ん中に置いて配置されていると言っても過言ではありません。使い方はとても簡単なので勉強するというほどのことでもないですが、一応抑えておきましょう。
Amazon Machine Learning
これは機械学習のサービスです。IoTのセンサーデータの使いみちは
- 過去: 過去の大量データを分析して法則性を見つけ出す
- 現在: 現時点でのデータの動きを可視化して見られるようにする
- 未来: 分析されたデータを元に機械学習で将来のデータ値を予測する
の3つに大きく分けられます。Amazon Machine Learningはこれらのうち「未来」を司るわけですが、現時点ですぐにこれをしたい、という要件はなかなかまだありません。ということは今これを覚えておくと、2年後にこういう要件がでた時にすぐさま対応できるわけです。基本的な機械学習の考え方も勉強しておく必要があるので手軽ではありませんがやっておく価値は充分にあります。
公式ドキュメント: Amazon Machine Learning
キーワード
MQTT
IoTを既にやっている方ならお馴染みのワードですね。MQTTとはデータ送信のプロトコルの名前です。プロトコルヘッダーは最小2バイトと小さく,HTTPやHTTPSに比べてオーバーヘッドが少ないので、バッテリー消費を抑えたいIoTデバイスに向いています。 MQTTの基本的な考え方、Pub/Subやtopic,QoS,Will等の用語は抑えておきましょう。
X.509 / TLS1.2
AWSでIoTをする際に重要なキーワードとして「セキュリティー」があります。今回のRe:InventのセッションでもIoTのセッションでは充分な時間をセキュリティーの保ち方について取られていました。 AWS IoTではX.509という公開鍵の規格を使用します。また通信プロトコルとしてTLS1.2を使用します。特に鍵の仕組みについては事前に勉強しておく必要があるかと思います。
X.509(WikiPedia) RFC3280: X.509 TLS1.2(WikiPedia)
JavaScript / Node.js
Lambdaを使う時にはJavaScriptを使うことが多いです。AWSは将来的にはLambdaを色々な言語で扱えるようにしたいとのことですが、現時点ではJavaScriptで実装するのが最も手軽で確実です。またデバイス側もnode.jsで実装することが増えてきていますのでpromissなどのメソッドや非同期の仕組みを勉強して使えるようにしておきましょう。
公式ドキュメント: AWS SDK for JavaScript
Java
AWSのSDKやAPI等のGUIではない部分のライブラリはJavaでの実装が早いことが多いです。Kinesis StreamのピックアップライブラリやGeo locationのライブラリはJavaで実装されて発表されています。Lambdaも今はJavaでかけるようになっていますので、ハードな要求があるときにはこの様な地に足の着いたJavaで書けるようにしておきましょう。
公式ブログ: Geo Library for Amazon DynamoDB
C / C++
C言語は学生時代で終了、という方も多いですが、やはりセンサーデータ側の実装にはまだまだCが活躍しております。 Cをスキップしてきた、というエンジニアの方にはこれを機会にC言語を習得してみてはいかがでしょうか。
まとめ
いかがでしたでしょうか。以上出たきたサービス、キーワードを自分なりのペースで勉強していけば、IoT系はバッチリ!ですね。